<!DOCTYPE html>
<html lang="en">

<!-- Head tag -->
<head><meta name="generator" content="Hexo 3.8.0">

    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <!--Description-->

    

    
        <meta name="description" content="MainWindow 是QT创建应用程序三种界面中的一种，也是比较常用的一种。与QWidget相比，MainWindow自带了许多控件，如QMenuBar、QToolBar、QStatusBar等等。
菜单栏1234567891011121314151617181920212223//获取菜单栏QM">
    

    <!--Author-->
    
        <meta name="author" content="Cyrus">
    

    <!--Open Graph Title-->
    
        <meta property="og:title" content="QT基础3——QMainWindow及相关控件">
    

    <!--Open Graph Description-->
    
        <meta property="og:description" content="MainWindow 是QT创建应用程序三种界面中的一种，也是比较常用的一种。与QWidget相比，MainWindow自带了许多控件，如QMenuBar、QToolBar、QStatusBar等等。
菜单栏1234567891011121314151617181920212223//获取菜单栏QM">
    

    <!--Open Graph Site Name-->
        <meta property="og:site_name" content="Cyrus的技术空间">

    <!--Type page-->
    
        <meta property="og:type" content="article">
    

    <!--Page Cover-->
    
    
        <meta property="og:image" content="http://cyrus_huang.gitee.io/bloghttp://www.codeblocq.com/assets/projects/hexo-theme-clean-blog/img/home-bg.jpg">
    

        <meta name="twitter:card" content="summary_large_image">

    

    
        <meta name="twitter:image" content="http://cyrus_huang.gitee.io/bloghttp://www.codeblocq.com/assets/projects/hexo-theme-clean-blog/img/home-bg.jpg">
    

    <!-- Title -->
    
    <title>QT基础3——QMainWindow及相关控件 - Cyrus的技术空间</title>

    <!-- Bootstrap Core CSS -->
    <link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet">

    <!-- Custom CSS -->
    <link rel="stylesheet" href="/blog/css/style.css">

    <!-- Custom Fonts -->
    <link href="//maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css" rel="stylesheet" type="text/css">
    <link href="//fonts.googleapis.com/css?family=Lora:400,700,400italic,700italic" rel="stylesheet" type="text/css">
    <link href="//fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800" rel="stylesheet" type="text/css">

    <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
    <!--[if lt IE 9]>
    <script src="//oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
    <script src="//oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
    <![endif]-->

    <!-- Gallery -->
    <link href="//cdnjs.cloudflare.com/ajax/libs/featherlight/1.3.5/featherlight.min.css" type="text/css" rel="stylesheet">

    <!-- Google Analytics -->
    


    <!-- favicon -->
    

</head>


<body>

    <!-- Menu -->
    <!-- Navigation -->
<nav class="navbar navbar-default navbar-custom navbar-fixed-top">
    <div class="container-fluid">
        <!-- Brand and toggle get grouped for better mobile display -->
        <div class="navbar-header page-scroll">
            <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
                <span class="sr-only">Toggle navigation</span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
            </button>
            <a class="navbar-brand" href="/blog/">Cyrus的技术空间</a>
        </div>

        <!-- Collect the nav links, forms, and other content for toggling -->
        <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
            <ul class="nav navbar-nav navbar-right">
                
                    <li>
                        <a href="/blog/">
                            
                                Home
                            
                        </a>
                    </li>
                
                    <li>
                        <a href="/blog/archives">
                            
                                Archives
                            
                        </a>
                    </li>
                
                    <li>
                        <a href="/blog/tags">
                            
                                Tags
                            
                        </a>
                    </li>
                
                    <li>
                        <a href="/blog/categories">
                            
                                Categories
                            
                        </a>
                    </li>
                
                    <li>
                        <a href="https://github.com/klugjo/hexo-theme-clean-blog">
                            
                                <i class="fa fa-github fa-stack-2x"></i>
                            
                        </a>
                    </li>
                
            </ul>
        </div>
        <!-- /.navbar-collapse -->
    </div>
    <!-- /.container -->
</nav>

    <!-- Main Content -->
    <!-- Page Header -->
<!-- Set your background image for this header in your post front-matter: cover -->

<header class="intro-header" style="background-image: url('http://www.codeblocq.com/assets/projects/hexo-theme-clean-blog/img/home-bg.jpg')">
    <div class="container">
        <div class="row">
            <div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1">
                <div class="post-heading">
                    <h1>QT基础3——QMainWindow及相关控件</h1>
                    
                    <span class="meta">
                        <!-- Date and Author -->
                        
                            Posted by Cyrus on
                        
                        
                            2018-12-15
                        
                    </span>
                </div>
            </div>
        </div>
    </div>
</header>

<!-- Post Content -->
<article>
    <div class="container">
        <div class="row">

            <!-- Tags and categories -->
           
                <div class="col-lg-4 col-lg-offset-2 col-md-5 col-md-offset-1 post-tags">
                    
                        

<a href="/blog/categories/QT/">QT</a>

                    
                </div>
                <div class="col-lg-4 col-md-5 post-categories">
                    
                </div>
            

            <!-- Gallery -->
            

            <!-- Post Main Content -->
            <div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1">
                <p>MainWindow 是QT创建应用程序三种界面中的一种，也是比较常用的一种。与QWidget相比，MainWindow自带了许多控件，如QMenuBar、QToolBar、QStatusBar等等。</p>
<h3 id="菜单栏"><a href="#菜单栏" class="headerlink" title="菜单栏"></a>菜单栏</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line">//获取菜单栏</span><br><span class="line">QMenuBar *mBar = menuBar();</span><br><span class="line">//添加菜单</span><br><span class="line">QMenu *pFile = mBar-&gt;addMenu(QString(&quot;File&quot;));</span><br><span class="line">//菜单下拉选项</span><br><span class="line">QAction *pNew = pFile-&gt;addAction(QString(&quot;New&quot;));</span><br><span class="line">//选项绑定事件</span><br><span class="line">connect(pNew, &amp;QAction::triggered,</span><br><span class="line">      	[=]() &#123;</span><br><span class="line">			qDebug() &lt;&lt; &quot;New&quot;;</span><br><span class="line">      	&#125;</span><br><span class="line">);</span><br><span class="line">    </span><br><span class="line">//菜单添加分割线</span><br><span class="line">pFile-&gt;addSeparator();</span><br><span class="line"></span><br><span class="line">//添加另一个下拉选项和对应的事件</span><br><span class="line">QAction *pOpen = pFile-&gt;addAction(QString(&quot;Open&quot;));</span><br><span class="line">connect(pOpen, &amp;QAction::triggered,</span><br><span class="line">        [=]() &#123;</span><br><span class="line">                qDebug() &lt;&lt; &quot;Open&quot;;</span><br><span class="line">        &#125;</span><br><span class="line">);</span><br></pre></td></tr></table></figure>
<h3 id="工具栏"><a href="#工具栏" class="headerlink" title="工具栏"></a>工具栏</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line">//工具栏， 菜单栏对应的快捷方式</span><br><span class="line">   QToolBar *toolBar = addToolBar(&quot;toolBar&quot;);</span><br><span class="line">   //工具栏添加快捷键</span><br><span class="line">   toolBar-&gt;addAction(pNew);</span><br><span class="line">   toolBar-&gt;addAction(pOpen);</span><br><span class="line"></span><br><span class="line">   QPushButton *b = new QPushButton(this);</span><br><span class="line">   b-&gt;setText(&quot;*_*&quot;);</span><br><span class="line">   //添加小控件</span><br><span class="line">   toolBar-&gt;addWidget(b);</span><br><span class="line">   connect(b, &amp;QPushButton::clicked,</span><br><span class="line">           [=]()&#123;</span><br><span class="line">       b-&gt;setText(&quot;^-^&quot;);</span><br><span class="line">   &#125;);</span><br></pre></td></tr></table></figure>
<h3 id="状态栏"><a href="#状态栏" class="headerlink" title="状态栏"></a>状态栏</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">//状态栏</span><br><span class="line">QStatusBar *sbar = statusBar();</span><br><span class="line">QLabel *label = new QLabel(this);</span><br><span class="line">label-&gt;setText(&quot;long long time ago&quot;);</span><br><span class="line">sbar-&gt;addWidget(label);</span><br><span class="line">//从左往右加</span><br><span class="line">sbar-&gt;addWidget(new QLabel(&quot;hehe&quot;, this));</span><br><span class="line">//从右往左加</span><br><span class="line">sbar-&gt;addPermanentWidget(new QLabel(&quot;xixi&quot;, this));</span><br></pre></td></tr></table></figure>
<h3 id="设置核心控件和浮动窗口"><a href="#设置核心控件和浮动窗口" class="headerlink" title="设置核心控件和浮动窗口"></a>设置核心控件和浮动窗口</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">QTextEdit *textEdit = new QTextEdit(this);</span><br><span class="line">   //将文本编辑设为核心控件</span><br><span class="line">   setCentralWidget(textEdit);</span><br><span class="line">   </span><br><span class="line">   //浮动窗口</span><br><span class="line">   QDockWidget *dock = new QDockWidget(this);</span><br><span class="line">   addDockWidget(Qt::LeftDockWidgetArea, dock);</span><br></pre></td></tr></table></figure>
<h3 id="对话框"><a href="#对话框" class="headerlink" title="对话框"></a>对话框</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br></pre></td><td class="code"><pre><span class="line">//一、模态对话框</span><br><span class="line">//模态对话框，使用exex()调用，无法操作当前窗口，关闭窗口后才能继续运行MainWindow代码</span><br><span class="line">QDialog dlg;</span><br><span class="line">dlg.exec();</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">//二、非模态对话框</span><br><span class="line">//非模态对话框，使用show()调用，不会阻塞MainWindow代码</span><br><span class="line"></span><br><span class="line">错误写法如下：对话框一闪而过</span><br><span class="line">QDialog dlg;</span><br><span class="line">dlg.show();</span><br><span class="line"></span><br><span class="line">修正写法：</span><br><span class="line">1、使用new创建对象，缺点是不能主动释放，生成太多对话框的话内存高</span><br><span class="line">QDialog *dlg = new QDialog(this);</span><br><span class="line">dlg-&gt;show();</span><br><span class="line"></span><br><span class="line">2、将QDialog设为成员变量，直接调用show()</span><br><span class="line"></span><br><span class="line">3、将QDialog属性设置为关闭时释放,即方法1的修正写法</span><br><span class="line">QDialog *dlg = new QDialog;</span><br><span class="line">dlg-&gt;setAttribute(Qt::WA_DeleteOnClose);</span><br><span class="line">dlg-&gt;show();</span><br></pre></td></tr></table></figure>
<h3 id="选择弹框"><a href="#选择弹框" class="headerlink" title="选择弹框"></a>选择弹框</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line">//多个按钮由|分隔，选择的按钮存在于返回值中</span><br><span class="line">    int ret = QMessageBox::warning(this, tr(&quot;MyApplication&quot;), tr(&quot;The document has been modified.\n&quot; &quot;Do you want to save your changes?&quot;),</span><br><span class="line">QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel, QMessageBox::Save);</span><br><span class="line">	//枚举返回值进行相应处理</span><br><span class="line">    switch (ret) &#123;</span><br><span class="line">        case QMessageBox::Save:</span><br><span class="line">            qDebug() &lt;&lt; &quot;save&quot;;</span><br><span class="line">        break;</span><br><span class="line">        case QMessageBox::Discard:</span><br><span class="line">            qDebug() &lt;&lt; &quot;Discard&quot;;</span><br><span class="line">         break;</span><br><span class="line">        case QMessageBox::Cancel:</span><br><span class="line">            qDebug() &lt;&lt; &quot;Cancel&quot;;</span><br><span class="line">        break;</span><br><span class="line">    default:</span><br><span class="line">        break;</span><br><span class="line">    &#125;</span><br><span class="line">    </span><br><span class="line">    //文件名选择框，返回选择的文件名</span><br><span class="line">    QString fileName = QFileDialog::getOpenFileName(this,tr(&quot;Open Image&quot;), &quot;../&quot;, tr(&quot;Image Files (*.png *.jpg *.bmp)&quot;));</span><br><span class="line">    qDebug() &lt;&lt; fileName;</span><br></pre></td></tr></table></figure>


                
            </div>

            <!-- Comments -->
            
                <div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1">
                    


                </div>
            
        </div>
    </div>
</article>

    <!-- Footer -->
    <hr>

<!-- Footer -->
<footer>
    <div class="container">
        <div class="row">
            <div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1">
                <ul class="list-inline text-center">
                    

                    

                    
                        <li>
                            <a href="https://github.com/klugjo/hexo-theme-clean-blog" target="_blank">
                                <span class="fa-stack fa-lg">
                                    <i class="fa fa-circle fa-stack-2x"></i>
                                    <i class="fa fa-github fa-stack-1x fa-inverse"></i>
                                </span>
                            </a>
                        </li>
                    

                    

                    

                    
                </ul>
                <p class="copyright text-muted">&copy; 2020 Cyrus<br></p>
                <p class="copyright text-muted">Original Theme <a target="_blank" href="http://startbootstrap.com/template-overviews/clean-blog/">Clean Blog</a> from <a href="http://startbootstrap.com/" target="_blank">Start Bootstrap</a></p>
                <p class="copyright text-muted">Adapted for <a target="_blank" href="https://hexo.io/">Hexo</a> by <a href="http://www.codeblocq.com/" target="_blank">Jonathan Klughertz</a></p>
                <p class="copyright text-muted"><a href="http://www.beian.miit.gov.cn">粤ICP备18110122号-1</a></p>
            </div>
        </div>
    </div>
</footer>


    <!-- After footer scripts -->
    
<!-- jQuery -->
<script src="//code.jquery.com/jquery-2.1.4.min.js"></script>

<!-- Bootstrap -->
<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>

<!-- Gallery -->
<script src="//cdnjs.cloudflare.com/ajax/libs/featherlight/1.3.5/featherlight.min.js" type="text/javascript" charset="utf-8"></script>

<!-- Disqus Comments -->



</body>

</html>